home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1995-11-25 | 16.0 KB | 280 lines |
- (******************************************************************************)
- (* This MODULE is Public Domain. Copy me like a beast! *)
- (* Christian Ledermann *)
- (* Wölfelkofen 2 *)
- (* 84166 Adlkofen *)
- (******************************************************************************)
- (* *)
- (* Started: 20.12.92 03:54:30 *)
- (* Version: 20.12.89 03:504:12:54 *)
- (* *)
- (******************************************************************************)
- (* *)
- (* Diese Software ist ohne jede Garantie. Ich verspreche *)
- (* keinerlei Wartung und übernehme keine Verantwortung für Schäden die *)
- (* durch die Benutzung dieses Programmes entstehen. *)
- (* Jegliche Ersatzansprüche lehne ich ab. *)
- (* *)
- (******************************************************************************)
- DEFINITION MODULE EasyDialog;
-
- FROM SYSTEM IMPORT ADDRESS,WORD;
-
- TYPE
- TreePROC = PROCEDURE (ADDRESS, INTEGER);
-
- CONST
- (* Diese beiden CONSTanten sind in GEMAESBase falsch definiert !! *)
- EndMouseControl=2;
- BeginMouseControl=3;
- (* Zum Arbeiten also unbedingt(!!) diese hier benutzen *)
-
- PROCEDURE and(a,b:WORD):BOOLEAN;
- (********** Bitweiser Vergleich wie in C *********)
-
- PROCEDURE WorkTree(TreePtr :ADDRESS; StartObject,EndObject : INTEGER;
- Do : TreePROC);
-
- (************** ObjectStruktur eines Baumes durchforsten *************)
- (* WorkTree wandert die Objectstruktur eines Baumes ab und führt *)
- (* dabei die Routine Do aus, die das aktuelle Object bearbeitet *)
- (* Soll der ganze Baum bearbeitet werden, müssen StartObject und *)
- (* EndObject 0 sein. *)
- (* Portiert von c -> M2 Orginal in ST-Computer 5/88 *)
- (*********************************************************************)
-
- PROCEDURE FormButton(Tree :ADDRESS; Object,Clicks : INTEGER;
- VAR NextObject :INTEGER):INTEGER;
- (***** Primitive AES-Funktion wird für FormMoveDial benötigt *********)
- (* Die Funktion wertet Mausknopfeingaben in Dialogen aus. *)
- (* Tree : Adresse des Dialoges, zu ermitteln mit *)
- (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *)
- (* Object : enthält das aktuelle Object *)
- (* Clicks : maximale Anzahl von Mausclicks *)
- (* NextObject : neues Aktuelles Object nach dem Funktionsaufruf *)
- (* Funktionsergebnis ist ein Wert # 0 wenn ein Exit-Object ausgewählt*)
- (* wurde. Dieser Wert entspricht der Nummer des angewählten Objectes *)
- (* -> ST 2/92 *)
- (*********************************************************************)
-
- PROCEDURE FormKeyboard(Tree :ADDRESS; Object,Next,Char:INTEGER;
- VAR NextObject,NextChar :INTEGER):INTEGER;
- (***** Primitive AES-Funktion wird für FormMoveDial benötigt *********)
- (* Die Funktion wertet Tastatureingaben in Dialogen aus. *)
- (* Tree : Adresse des Dialoges, zu ermitteln mit *)
- (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *)
- (* Object : enthält das aktuelle Object *)
- (* Next : nächstes Object *)
- (* NextObject : aktuelles Object nach dem Funktionsaufruf *)
- (* NextChar : nächstes Zeichen *)
- (* Funktionsergebnis ist ein Wert # 0 wenn ein Exit-Object ausgewählt*)
- (* wurde. Dieser Wert entspricht der Nummer des angewählten Objectes *)
- (* Hier also immer die Nummer des Default-Objectes *)
- (* -> ST 2/92 *)
- (*********************************************************************)
-
-
- PROCEDURE FileSelectXtendedInput(VAR InPath,InSelect:ARRAY OF CHAR;
- VAR ExButton:INTEGER; label: ARRAY OF CHAR):INTEGER;
-
- (************** Der Fileselctor ab TOS 1.04 ***********************)
- (* InPath : Pfad Voreinstellung z.B. C:\Hammer\*.123 *)
- (* INSelect : Voreinstellung für den Dateinamen z.B. UNTITLED.123 *)
- (* ExButton : 0 = Abbruch, 1 = OK *)
- (* label : Titeltext der File Select box *)
- (* Rückgabe : 0 Fehler bei der Durchführung, #0 Kein Fehler *)
- (******************************************************************)
-
- PROCEDURE EasyFileSelect(VAR Maske, DateiName: ARRAY OF CHAR; Text : ARRAY OF CHAR):BOOLEAN;
-
- (***************** Vereinfachter FileSelector *********************)
- (* Maske : Pfad Voreinstellungen z.B. \Hammer\*.123 *)
- (* Intern wird das aktuelle Laufwerk und Pfad ermittelt und Maske *)
- (* daran angehängt, In der Fileselectbox erhält man also : *)
- (* C:\MODULA\Hammer\*.123 *)
- (* Zurückgegeben wird in Maske der Pfadname der Ausgewählten Datei*)
- (* ohne angehängte WildCards also z.B. C:\LPR\HAMMER\ *)
- (* DateiName : Voreinstellnung für den Dateinamen z.B. UNTILED.123*)
- (* Zurückgegeben wird der ausgewählte Dateinahme z.B: TEST.123 *)
- (* Text : Titeltext der Fileselectorbox ab TOS 1.04 ansonsten wird*)
- (* Text ignoriert und die 'normale' Fileselectorbox aufgerufen *)
- (* Hierbei wird auch der Cookie abgefragt d.h wenn Selectric *)
- (* installiert ist wird die Fileselectbox mit Titeltext aufgerufen*)
- (* Rückgabe : TRUE Kein Fehler OK angewählt *)
- (* FALSE Abbruch gewählt oder Fehler *)
- (* c->M2 -> ST 4/93 *)
- (******************************************************************)
-
- PROCEDURE MoveFormDo(TreePtr :ADDRESS; EditObject :INTEGER):INTEGER;
- (****************** Dialog Box Ausführen *****************************)
- (* Der GegenPart zu AES.FormDo mit den unter DoMoveDialog *)
- (* beschriebenen Erweiterungen. Die Checkboxen werden allerdings nur *)
- (* unter DoMoveDialog initialisiert -> entweder muß der Status *)
- (* Selected schon im RCS gegeben werden oder hier vorher "von Hand" *)
- (* Meine Empfehlung: Beim ersten Aufruf einer DialogBox DoMoveDialog *)
- (* verwenden, und später dann mit MoveFormDo weitermachen dann merkt *)
- (* die Dialogbox sich auch ihren Ort und taucht immer an der selben *)
- (* Stelle auf. *)
- (*********************************************************************)
-
-
-
- PROCEDURE DoDialog(DialogAdresse:ADDRESS;ErstesObject:INTEGER):INTEGER;
-
- (****************** Dialog Box Ausführen *****************************)
- (* DialogAdresse : Adresse des Dialoges, zu ermitteln mit *)
- (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *)
- (* NummerDerBox ist Vom RCS erzeugt worden und Steht in der .I -Datei*)
- (* ErstesObject : Erstes Editierbares Object, dort steht dann der *)
- (* Cursor im Edit Feld *)
- (* Rückgabe : Das Feld das zum Verlassen der Box angeklickt wurde. *)
- (* DoDialog zeichnet eine Dialogbox und führt Sie aus. Es werden *)
- (* Grow- und Shrink-Boxen von der Cursor Position ab und am Ende zu *)
- (* ihr hin Gezeichnet. Redraw Message wird ans GEM geschickt *)
- (*********************************************************************)
-
- PROCEDURE DoMoveDialog(DialogAdresse:ADDRESS;ErstesObject:INTEGER):INTEGER;
- (****************** Dialog Box Ausführen *****************************)
- (* DialogAdresse : Adresse des Dialoges, zu ermitteln mit *)
- (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *)
- (* NummerDerBox ist Vom RCS erzeugt worden und Steht in der .I -Datei*)
- (* ErstesObject : Erstes Editierbares Object, dort steht dann der *)
- (* Cursor im Edit Feld *)
- (* Rückgabe : Das Feld das zum Verlassen der Box angeklickt wurde. *)
- (* DoMoveDialog zeichnet eine verschiebbare Dialogbox und führt Sie *)
- (* aus. Es werden keine Grow- und Shrink-Boxen gezeichnet *)
- (* ihr hin Gezeichnet. Der Bildschirm wird selbsttätig renoviert *)
- (* Der Dialog kann wie gewöhnlich im RCS erzeugt werden !!! *)
- (* Als Schmankerln sind hier noch ein paar Erweiterungen eingebaut *)
- (* 1.) Tastatursteuerung: wird Alt+Taste gedrückt so wird der Button *)
- (* im Dialogbaum ausgeführt der als letztes(!) diese Taste in Groß- *)
- (* buchstaben enthält. Dabei ist es gleichgültig ob der Buttontext *)
- (* noch andere Großbuchstaben enthält. OK reagiert also auf Alt-O *)
- (* und(!) auf Alt-K. *)
- (* 2.) Checkboxes: Ein Object vom Typ GBox das die Hintergrundfarbe *)
- (* schwarz hat und den Status crossed besitzt wird a) beim Aufruf *)
- (* von DoMoveDialog invertiert so das es nun eine weiße Box mit *)
- (* schwarzem Kreuz ist und b) wenn es im Dialog angeklickt wird mit *)
- (* dem Status Checked+Selected belegt -> weiße Box *)
- (* 3.) Wenn es kein DEFAULT-Object gibt wird mit ENTER bzw. RETURN *)
- (* der nächste editierbare Eintrag angesprungen. *)
- (*********************************************************************)
-
- (* In der ST 6/92 'XObjects' ist beschrieben wie man die Unterstriche*)
- (* u.a. erzeugt *)
- (* ST 7,8/91 'Checkboxen unter GEM'gab die Anregung zu den Checkboxen *)
- (* ST 2/92 Form_kebd & Form_Button in Maxon Pascal gaben die Anregung *)
- (* zur Implementierung der Tastatursteuerung *)
-
- PROCEDURE DrawDialog(DialogAdresse:ADDRESS);
-
- (****************** Dialog Box ausgeben *****************************)
- (* DialogAdresse : Adresse des Dialoges *)
- (* DrawDialog zeichnet eine Dialogbox. Es wird eine *)
- (* Grow-Box von der Cursor Position aus geöffnet. *)
- (* Der Bildschirmhintergrund wird gesichert. *)
- (* !!! DrawDialog und UndrawDialog niemals einzeln verwenden !! *)
- (*********************************************************************)
-
- PROCEDURE UndrawDialog(DialogAdresse : ADDRESS);
-
- (****************** Dialog Box schliessen ***************************)
- (* DialogAdresse : Adresse des Dialoges *)
- (* UndrawDialog shliesst eine Dialogbox. Es wird eine *)
- (* Shrink-Box zur Cursor Position hin gezeichnet. Der Bildschirm *)
- (* wird restauriert oder ggf. eine Redraw Message ans GEM geschickt. *)
- (* !!! DrawDialog und UndrawDialog niemals einzeln verwenden !! *)
- (*********************************************************************)
-
- PROCEDURE IsSelected(Index:INTEGER; TreePtr:ADDRESS ) : BOOLEAN;
-
- (*********** Hat das Object Index den Status Selected ? ************)
- (* Index : Nummer des Objectes. *)
- (* TreePtr: Adresse des Dialoges (s.o.) *)
- (* Rückgabe: TRUE = Ist selectiert, FALSE = Nicht selectiert *)
- (*******************************************************************)
-
- PROCEDURE IsCrossed(Index:INTEGER; TreePtr:ADDRESS ) : BOOLEAN;
-
- (*********** Hat das Object Index den Status Crossed ? *************)
- (* Index : Nummer des Objectes. *)
- (* TreePtr: Adresse des Dialoges (s.o.) *)
- (* Rückgabe: TRUE = Angekreuzt, FALSE = Nicht angekreuzt *)
- (*******************************************************************)
-
-
- PROCEDURE GetObjectFlags(Index:INTEGER; TreePtr:ADDRESS ) : INTEGER;
-
- (************** Welche flags hat das Object Index *****************)
- (* Index : Nummer des Objectes. *)
- (* TreePtr: Adresse des Dialoges (s.o.) *)
- (* Rückgabe: flags *)
- (* Mögliche Rückgaben sind None, Selectabel, default, Exit, .. *)
- (* HideTree, Indirect. (Siehe GEMAESBase) *)
- (*******************************************************************)
-
- PROCEDURE SetObjectFlags(Index:INTEGER; TreePtr:ADDRESS; NewFlag:INTEGER );
-
- (************** Setzt die flags des Objects Index *****************)
- (* Index : Nummer des Objectes. *)
- (* TreePtr: Adresse des Dialoges (s.o.) *)
- (* NewFlags: Dieses flag wird gesetzt. *)
- (* Mögliche Angaben sind None, Selectabel, default, Exit, .. *)
- (* HideTree. (Siehe GEMAESBase) *)
- (* Die Routine wurde entwickelt um das Hidetree und Editable flag *)
- (* zu Setzen d.h. um Einträge in DialogBoxen Unsichtbar zu Machen *)
- (* oder EditFelder editierbar oder nichteditierbar zu machen *)
- (*******************************************************************)
-
-
- PROCEDURE GetObjectXYWH(Index:INTEGER; TreePtr:ADDRESS;VAR x,y,w,h:CARDINAL);
-
- (************** Welchen Position hat das Object Index? *************)
- (* Index : Nummer des Objectes. *)
- (* TreePtr: Adresse des Dialoges (s.o.) *)
- (* x,y,w,h : Position des Objectes *)
- (*******************************************************************)
-
-
- PROCEDURE SetObjectXYWH(Index:INTEGER; TreePtr:ADDRESS;x,y,w,h:CARDINAL );
-
- (************** Setze Position des Objectes Index *****************)
- (* Index : Nummer des Objectes. *)
- (* TreePtr: Adresse des Dialoges (s.o.) *)
- (* x,y,w,h : Neue Position des Objectes *)
- (*******************************************************************)
-
-
-
- PROCEDURE GetText(Index:INTEGER;TreePtr:ADDRESS; VAR String:ARRAY OF CHAR);
-
- (************** Welchen Text hat das Object Index *****************)
- (* Index : Nummer des Objectes. *)
- (* TreePtr: Adresse des Dialoges (s.o.) *)
- (* String : Hier Kommt der Text rein. *)
- (* Wurde zum einfachen Umgang mit Editfeldern in DialogBoxen *)
- (* entwickelt. *)
- (*******************************************************************)
-
- PROCEDURE SetText(Index:INTEGER;TreePtr:ADDRESS; String:ARRAY OF CHAR);
-
- (************** Setze den Text des Objects Index * *****************)
- (* Index : Nummer des Objectes. *)
- (* TreePtr: Adresse des Dialoges (s.o.) *)
- (* String : Neuer Text, Er sollte nicht länger sein als der *)
- (* Orginaltext der Dialogbox, sonst kommt es zu unangenehmen *)
- (* Überraschungen ! *)
- (* Wurde zum einfachen Umgang mit Editfeldern in DialogBoxen *)
- (* entwickelt. *)
- (*******************************************************************)
-
- PROCEDURE GetObjectTail( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
- PROCEDURE GetObjectHead( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
- PROCEDURE GetNextObject( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
- PROCEDURE GetObjectState( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
- PROCEDURE GetObjectType( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
- PROCEDURE GetBoxColor(Index:INTEGER;TreePtr:ADDRESS):INTEGER;
- PROCEDURE InitCheckBoxes(TreePtr : ADDRESS);
-
- END EasyDialog.
-